package com.fudan.backend.service;

import com.fudan.backend.pojo.Bill;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

public interface BillService {
    /**
     * 增添流水
     */
    String addBill(String sendAccountId, String receiveAccountId, Double amount, Integer type, String moreInfo);

    /**
     * 对应账户获取当前时间之前days天的全部流水
     *
     * @param accountId 账户id
     * @param days      天数
     */
    List<Bill> getAllBillByAccountIdAndDays(String accountId, Integer days);

    List<Bill> getIncomeBillByAccountIdAndDays(String accountId, Integer days);

    List<Bill> getOutBillByAccountIdAndDays(String accountId, Integer days);

    /**
     * 对应账户获取当前时间之前months月的全部流水
     *
     * @param accountId 账户id
     * @param months    月数
     */
    List<Bill> getAllBillByAccountIdAndMonths(String accountId, Integer months);

    List<Bill> getIncomBillByAccountIdAndMonths(String accountId, Integer months);

    List<Bill> getOutBillByAccountIdAndMonths(String accountId, Integer months);

    /**
     * 所有流水
     */
    PageInfo<Bill> getAllBillPageByAccountId(String accountId, Integer current, Integer size);

    /**
     * 上月流水
     */
    PageInfo<Bill> getLastMonthBillPageByAccountId(String accountId, Integer current, Integer size);

    /**
     * 上周流水
     */
    PageInfo<Bill> getLastWeekBillPageByAccountId(String accountId, Integer current, Integer size);

    /**
     * 个人所有流水
     */
    PageInfo<Bill> getAllBillPageByUserId(String userId, Integer current, Integer size);

    /**
     * 用户个人账户上月流水
     */
    PageInfo<Bill> getLastMonthBillPageByUserId(String userId, Integer current, Integer size);

    /**
     * 用户个人账户上周流水
     */
    PageInfo<Bill> getLastWeekBillPageByUserId(String userId, Integer current, Integer size);

    /**
     * 商店账户所有流水
     *
     * @param storeId 商店id
     * @param userId  请求用户id，用于权限认证
     */
    PageInfo<Bill> getAllBillPageByStoreId(String storeId, String userId, Integer current, Integer size);

    /**
     * 商店账户上月流水
     */
    PageInfo<Bill> getLastMonthBillPageByStoreId(String storeId, String userId, Integer current, Integer size);

    /**
     * 商店账户上周流水
     */
    PageInfo<Bill> getLastWeekBillPageByStoreId(String storeId, String userId, Integer current, Integer size);

    Double calBillsAmount(List<Bill> billList);

    /**
     * 计算流水支出与入账
     *
     * @param type 0近一个周，1近一个月，2全部
     * @return map包含 income， expend
     */
    Map<String, Object> calUserStatistic(String userId, int type);

    /**
     * 计算流水支出与入账
     *
     * @param type   0近一个周，1近一个月，2全部
     * @return map包含 income， expend
     */
    Map<String, Object> calStoreStatistic(String storeId, String userId, int type);

    /**
     * 计算流水支出与入账
     *
     * @param type 0近一个周，1近一个月，2全部
     * @return map包含 income， expend
     */
    Map<String, Object> calWebshopStatistic(int type);
}
